import { Task, EmployeeWorkRecord} from "./types";
import { isNotYunXiaoNull } from "./utils";


export const getYunXiaoElements = ():any[]=>{
    const thead = document.querySelector("thead");
    if(!thead){
        return []
    }
    // 获取thead中的所有<th>元素
    const headers = thead?.querySelectorAll("th");
  
    // 创建一个对象来存储序号和标题文本
    let headerTitles: Record<string, number> = {}; // 添加字符串索引签名并初始化
  
  
    // 遍历每个<th>元素
    headers?.forEach((header, index) => {
      // 获取包含标题的<div>元素
      const titleSpan = header.querySelector(".teamix-title span");
  
      // 如果存在该<span>元素，则获取其中的标题文本
      if (titleSpan) {
        const titleText = titleSpan.textContent?.trim();
        // 将序号和标题文本存储到对象中
        if(titleText){
          headerTitles[titleText] = index;
        }
      }
    });
    console.log(headerTitles);
    const tbody = document.querySelector("tbody");
  
    if (!tbody) {
      console.error("tbody 元素未找到");
    }
    // 获取 <tbody> 中的所有 <tr> 行元素
    const rows = Array.from((tbody as HTMLTableSectionElement).rows); // 将 HTMLCollection 转换为数组
  
    // 第一步：过滤掉包含 'hidden' 类的行元素
    const visibleRows = rows.filter((row) => {
      const classList = row.className.split(" "); // 将 className 转换为数组
      return !classList.includes("hidden"); // 过滤掉包含 'hidden' 类的行
    });
  
    // 第二步：过滤出 'next-table-row-level-X' 其中 X <= 1 的行元素
    const filteredRows = visibleRows.filter((row) => {
      // 默认为0
      row.level = 0
      const classList = row.className.split(" "); // 将 className 转换为数组
  
      // 查找类名中是否包含 'next-table-row-level-X' 形式
      const levelClass = classList.find((className) =>
        className.startsWith("next-table-row-level-")
      );
  
      // 如果没有找到 'next-table-row-level-X'，则默认通过过滤条件
      if (!levelClass) {
        return true
      }
  
      // 提取类名中的数字部分（例如 'next-table-row-level-2' 中的 '2'）
      const levelStr = (levelClass.split("-").pop() ?? '');
      const level = parseInt(levelStr.trim(), 10);
      row.level = level
      // 检查数字部分是否 <= 1
      return level <= 1;
    });
    console.log(filteredRows, "filteredRows");
    const results = [];
  
    for (const row of filteredRows) {
      const titleCell = row.cells[headerTitles["标题"]]
      const tag = row.cells[headerTitles["标签"]]?.innerText || null;
      let isTask = false
      let isAssociationManager = false
      //  如果标签中有备注是任务分组(就不统计了)
      if(tag && tag.includes("任务分组")){
        continue
      }
      if(tag && tag.includes("关联需求")){
        isAssociationManager = true
      }
      // 判断是不是任务
      if(titleCell){
        if(titleCell.querySelector('.teamix-icon-naobao-Brainstorm-line')){
          isTask = true
        }
      }
      const level = row.level||0
      // 如果级别大于0，并且是任务,并且任务标签中没有打关联需求标签，过滤
      if(level>0 && isTask && !isAssociationManager){
        continue
      }
      let task = titleCell?.innerText || null;
      if (!task) {
        continue;
      }
      task = task.replace(/\n/g, "").trim();

      const getFieldValue = (field: string) => row.cells[headerTitles[field]]?.innerText || null;


     const projectPositionOne = getFieldValue("负责人");
    let frontEndLeader = getFieldValue("前端负责人");
    let backEndLeader = getFieldValue("后端负责人");
    let testLeader = getFieldValue("测试负责人") || getFieldValue("测试人员");
    const status = getFieldValue("状态");
    const integrationTime = getFieldValue("联调时间");
    const testingTime = getFieldValue("提测时间");
    const finishTestingTime = getFieldValue("测试完成时间");
    const planOnlineTime = getFieldValue("预估上线时间");
    const frontLaborHour = getFieldValue("前端工作量（人/日）");
    const backendLaborHour = getFieldValue("后端工作量（人/日）");
    const testLaborHour = getFieldValue("测试工作量（人/日）");
    const onlineTime = (planOnlineTime && planOnlineTime !== '--' ? planOnlineTime : (finishTestingTime && finishTestingTime !== '--' ? finishTestingTime : '--'));
    const updateLeader = (leader: string | null, field: string) => 
      !isNotYunXiaoNull(leader) ? getPrincipal(row.cells[headerTitles[field]]) : leader;
    
    frontEndLeader = updateLeader(frontEndLeader, "前端负责人");
    backEndLeader = updateLeader(backEndLeader, "后端负责人");
    testLeader = updateLeader(testLeader, "测试负责人") || updateLeader(testLeader, "测试人员");
    
      results.push({
        task,
        status,
        testLeader,
        projectPositionOne,
        frontEndLeader,
        backendLaborHour,
        testLaborHour,
        frontLaborHour,
        backEndLeader,
        testingTime,
        finishTestingTime,
        onlineTime,
        planOnlineTime,
        isTask,
        level,
        tag,
        integrationTime
      });
    }
    return results
  }

// 获取负责人
function getPrincipal(el: Element): string {
  return el && Array.from(el.querySelectorAll('.yunxiao-avatar-group img'))
    .map(img => (img as HTMLImageElement).alt)
    .filter(Boolean)
    .join(',');
}